"""
抖音开放平台API使用示例

本示例展示了如何使用DouYinAPI类调用抖音开放平台的各种功能。
在运行前，请确保已正确设置Client Key和Client Secret。
"""

import os
import json
from cn_api_adapters import DouYinAPI


def douyin_api_example():
    """
    抖音开放平台API使用示例函数
    """
    # 1. 初始化DouYinAPI
    # 从环境变量获取配置或直接设置
    client_key = os.getenv('DOUYIN_CLIENT_KEY', 'your_client_key')
    client_secret = os.getenv('DOUYIN_CLIENT_SECRET', 'your_client_secret')
    
    # 创建API实例
    douyin = DouYinAPI(client_key=client_key, client_secret=client_secret, debug=True)
    
    print("抖音开放平台API使用示例")
    print("="*50)
    
    # 2. 获取授权URL
    try:
        print("\n1. 生成授权URL:")
        redirect_uri = "https://your-server.com/callback"
        scope = ["user_info", "video.create"]
        state = "random_state"
        
        auth_url = douyin.get_authorization_url(redirect_uri, scope, state)
        print(f"授权URL: {auth_url}")
        print("用户需要访问此URL进行授权，然后会重定向到您的回调地址")
    except Exception as e:
        print(f"生成授权URL失败: {e}")
    
    # 3. 通过授权码获取AccessToken
    try:
        print("\n2. 通过授权码获取AccessToken:")
        # 注意：实际使用时需要从回调请求中获取授权码
        # code = "从回调请求中获取的授权码"
        # token_data = douyin.get_access_token_by_code(code, redirect_uri)
        # print(f"获取AccessToken成功: {token_data['access_token'][:10]}...")
        print("请在实际场景中从回调请求获取授权码后调用")
    except Exception as e:
        print(f"获取AccessToken失败: {e}")
    
    # 4. 设置AccessToken（如果已有）
    try:
        print("\n3. 设置已有的AccessToken:")
        # 假设我们已经有了access_token和refresh_token
        # douyin.set_access_token('your_access_token', 'your_refresh_token')
        print("可以通过此方法设置已有的token")
    except Exception as e:
        print(f"设置AccessToken失败: {e}")
    
    # 5. 获取用户信息
    try:
        print("\n4. 获取用户信息:")
        # 注意：需要先设置有效的access_token
        # user_info = douyin.get_user_info()
        # print(f"用户信息: {json.dumps(user_info, ensure_ascii=False, indent=2)}")
        print("请先设置有效的access_token后调用")
    except Exception as e:
        print(f"获取用户信息失败: {e}")
    
    # 6. 视频上传示例
    try:
        print("\n5. 视频上传示例:")
        # 注意：需要先设置有效的access_token和准备好视频文件
        # video_path = "path/to/video.mp4"
        # with open(video_path, 'rb') as f:
        #     video_file = f.read()
        # upload_result = douyin.upload_video(video_file, "video.mp4", "测试视频")
        # print(f"视频上传结果: {upload_result}")
        print("请先设置有效的access_token和准备好视频文件后调用")
    except Exception as e:
        print(f"视频上传失败: {e}")
    
    # 7. 发布视频
    try:
        print("\n6. 发布视频示例:")
        # 注意：需要先上传视频获取video_id
        # publish_data = {
        #     "text": "这是一个测试视频",
        #     "video_id": "上传后返回的video_id",
        #     "cover_tsp": 1000  # 封面时间戳
        # }
        # publish_result = douyin.publish_video(**publish_data)
        # print(f"视频发布结果: {publish_result}")
        print("请先完成视频上传后调用")
    except Exception as e:
        print(f"视频发布失败: {e}")
    
    # 8. 获取评论列表
    try:
        print("\n7. 获取评论列表示例:")
        # 注意：需要视频的item_id
        # comments = douyin.get_comments("item_id", count=10)
        # print(f"评论列表: {json.dumps(comments, ensure_ascii=False, indent=2)}")
        print("请提供有效的item_id后调用")
    except Exception as e:
        print(f"获取评论列表失败: {e}")
    
    # 9. 小程序二维码生成
    try:
        print("\n8. 生成小程序二维码示例:")
        # qr_code = douyin.create_mini_app_qrcode("app_id", "page_path", scene="test")
        # with open("mini_app_qrcode.png", "wb") as f:
        #     f.write(qr_code)
        # print("小程序二维码已保存")
        print("请提供有效的app_id和page_path后调用")
    except Exception as e:
        print(f"生成小程序二维码失败: {e}")
    
    print("\n" + "="*50)
    print("抖音开放平台API示例演示完成")


if __name__ == "__main__":
    douyin_api_example()